一、常用寄存器操作
二、寄存器写操作
一、常用寄存器操作12345678/* 设置位 (置1) */*pReg |= (1 << bit_position);/* 清除位 (置0) */*pReg &= ~(1 << bit_position);/* 取反 */*pReg ^= (1 << bit_position);
二、寄存器写操作如下所示为配置Pc13引脚为输出模式的错误示例:
12345678/* 配置为通用输出 * 00:Input mode * 01:General purpose output mode * 10:Alternate function mode * 11:Analog mode(reset state)*/pReg = (uint32_t *)(0x48000800 + 0x00);*pReg |= 0x01 << 26;
默认配置为为11,上述操作只修改了第二位,第一位未修改,导致配置错误,正确配置如下:
1234/* 配置为通用输出 */pReg = (uint32_t *...
一、存储器映射
STM32H750存储器映射
二、Block 0
三、Block 1
四、Block 2
STM32H750 是 ST 基于 Cortex-M7 内核的高性能 MCU,其复杂的 存储器架构 和 多总线矩阵 为开发者提供了极高的灵活性,但也带来了学习难度。深入了解STM32存储器映射和物理内存布局,了解不同存储区域的用途与性能差异,对于我们实际开发,如bootloader程序编写、MPU配置、链接脚本等,有着巨大帮助。
一、存储器映射STM32是一个32为单片机,它可以很方便访问4GB以内的存储空间,存储器本身是没有地址信息的,对存储器分配地址的过程就叫存储器映射。ST将所有的存储器及外设资源都映射在一个4GB的地址空间上(8个块),从而可以通过访问对应的地址,访问具体的外设。其映射关系如下图所示:
STM32H750存储器映射二、Block 0
地址范围
功能
0x0000 0000 ~ 0x0000 FFFF
ITCM RAM,只能被CPU和MDMA 访问,属于高速的RAM
0x0001 0000 ~ 0x000F FFFF
...
对上述分散加载文件逐行解析如下:
一、定义加载区域(Load Region)
2)定义执行区域(Execution Region)
(3)指定复位向量和启动代码
(4)C 库初始化段
(5)所有只读代码和常量
(6)所有可执行的只读代码
(7)定义 RAM 区域
(8)分配读写数据和零初始化数据
在 STM32嵌入式开发 中,分散加载文件(.sct或.ld文件)是ARM编译器用来定义代码和数据在存储空间的布局的链接脚本。它告诉编译器如何将代码和数据分配到不同的存储区域(如Flash、RAM、TCM等)。合理使用分散加载文件可以优化性能、提高实时性,甚至增强系统稳定性。
STM32的sct分散加载描述文件如下:
123456789101112131415; *************************************************************; *** Scatter-Loading Description File generated by uVision ***; *******************************...
在工程下创建.vscode文件夹
在工程下创建.vscode文件夹
c_cpp_properties.json文件
1234567891011121314151617181920212223242526272829303132333435363738394041424344{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "./Core/Inc", "./Drivers/STM32h7xx_HAL_Driver/Inc", "./Drivers/STM32h7xx_HAL_Driver...
一、易失性存储器(RAM)
1、动态随机存储器DRAM(Dynamic RAM)
2、静态随机存储器SRAM
二、非易失性存储器(ROM)
三、非易失性存储器(FLASH)
四、应用
五、其他
为什么叫 NOR / NAND?
什么是DDR模式和SDR模式?
存储器是计算机结构的重要组成部分。存储器是用来存储程序代码和数据的部件,有了存储器计算机才具有记忆功能。
存储器按其存储介质特性主要分为“易失性存储器”和“非易失性存储器”两大类。易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。
一、易失性存储器(RAM)RAM(Random Access Memory),被称为随机存储器,现在专门用于指代作为计算机内存的易失性半导体存储器。
1、动态随机存储器DRAM(Dynamic RAM)动态随机存储器DRAM的存储单元以电容的电荷来表示数据,有电荷代表1,无电荷代表0,但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,因此它需要定期刷新操作,这就是“动态(Dynamic)”一词所形容的特性。
根据DRAM的通讯方式,又分为同...
一、为基本数据类型定义新的类型名
二、为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称
三、定义数组类型
四、定义指针类型
1、定义数组指针类型
2、定义函数指针类型
在实际使用中,typedef 的应用主要有如下4种。
一、为基本数据类型定义新的类型名用uint32_t替代unsigned int声明变量
1typedef unsigned int uint32_t;
定义一个unsigned int类型的变量
1uint32_t count = 0;
二、为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称使用结构体定义以及声明结构体变量:
123456789struct TagPoint{ double x; double y; double z;};/* 定义一个三维坐标结构体 *//* 声明一个三维坐标点 */struct TagPoint point = {0, 0, 0};
使用宏代替结构体定义以及声明结构体变量:
123456789typedef struct&...
STM32的MPU保护单元配置
一、MPU控制模式
二、三种内存类型
三、Cache介绍
1、Cache写操作
2、Cache读操作
2、数据一致性解决
二、区域设置
三、建议配(MPU_TEX_LEVEL0)(注意考虑数据一致性问题)
MPU,即内存保护单元,可以设置不同存储区域的存储器访问特性(用户级、特权访问、全访问)和存储器属性(如可缓存、可缓冲、可共享),对存储器(主要是内存和外设)提供保护,从而提高系统可靠性。
存储器访问特性
权限类型
特权模式(内核)
用户任务
典型用途
特权只读(PRIV_RO)
可读
不可访问 (触发故障)
保护只读内核代码/常量
特权读写(PRIV_RW)
可读写
不可访问 (触发故障)
内核数据结构、关键寄存器
全访问(FULL_ACCESS)
可读写
可读写
用户堆栈、共享内存
存储器属性
存储器属性
硬件行为
数据一致性
典型用途
可缓存
读写经过Cache
需软件维护(Clean/Invalidate)
单核私有高性能数据
可缓冲
写入通过Write ...
一、Git配置:
二、Git基础使用
二、辅助命令
三、分支操作
一、Git配置:
打开Git Bash依次输入以下命令配置个人信息:
123git config --global user.name "名称"git config --global user.email 邮箱地址git config --global user.password 密码
输入以下命令可以查看个人配置信息
1git config --global --list
在User下找到.ssh文件夹生成id_rsa.pub文件作为SSH密钥
1ssh-keygen -t rsa
配置配置.gitignore文件以此来忽略不需要提交的git文件
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667###################################...
一、安装PM2
二、PM2的使用
一、安装PM2
nvm是官方安装nodejs的工具,安装方式如下:
12345# 安装 nvm (Node 版本管理器)curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash# 如果上面进度慢,可以尝试国内镜像版本curl -o- https://gitee.com/mirrors/nvm/raw/v0.40.0/install.sh | bash
更改Node.js 下载镜像源(如淘宝镜像):
123456# 临时生效export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node# 永久生效(写入Shell配置文件)echo 'export NVM_NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"' >> ~/.bashrcsource ~/.bas...